#include "seqlist.h"

/*
*功能：创建一个顺序表
*参数: 
    无
*返回值: 
成功，返回 : 顺序表的地址
失败，返回 : NULL
*/
SeqList_t * Create_SeqList()
{
    SeqList_t *SeqListHead;
    //1、动态分配内存
    SeqListHead = (SeqList_t *)malloc(sizeof(SeqList_t));
    if(SeqListHead == NULL)
    {
        printf("Create_SeqList error!\n");
        return NULL;
    }

    //2、初始化表
    SeqListHead->pos = -1;
    
    //3、返回顺序表的地址 
    return SeqListHead;
}


/*
*功能：判断顺表是否已满
*参数: 
*  @: SeqListHead : 顺序表的地址
*  @: : 
*返回值: 
成功，返回 : 0
失败，返回 : -1
*/
int SeqListIsFull(SeqList_t *SeqListHead)
{
    return (SeqListHead->pos) >= Size - 1 ? 0 : -1 ;
}

/*
*功能：向顺序表中插入数据
*参数: 
*  @: SeqListHead : 顺序表的地址
*  @: : 
*返回值: 
成功，返回 : 0
失败，返回 : -1
*/
int SeqListInsertData(SeqList_t *SeqListHead,datatype data)
{
    //1、判满
    if(SeqListIsFull(SeqListHead) == 0)
    {
        printf("%s full,insert error!!!\n",__func__);
        //__func__  表示当前函数的函数名
        return -1;
    }

    //2、插入数据
    SeqListHead->data[++SeqListHead->pos] = data;

    //3、插入成功
    return 0;
}

/*
*功能：遍历顺序表
*参数: 
*  @: SeqListHead : 
*返回值: 
    无
*/
void SeqListShow(SeqList_t *SeqListHead)
{
    for(int i = 0; i <= SeqListHead->pos; i++)
    {
        printf("-%d",SeqListHead->data[i]);
    } 

    putchar(10);
}

/*
*功能：顺序表判空
*参数: 
*  @: SeqListHead : 顺序表的地址
*返回值: 
成功，返回 : 0
失败，返回 : -1
*/
int SeqListIsEmpty(SeqList_t *SeqListHead)
{
    return SeqListHead->pos == -1 ? 0 : -1;
}

/*
*功能：删除一个顺序表中的成员
*参数: 
*  @: SeqListHead : 顺序表的地址
*返回值: 
    成功，返回 : 删除的数据
    失败，返回 : -1
*/
datatype SeqListDeleteData(SeqList_t *SeqListHead)
{
    //1、判断顺序表是否为空
    if(SeqListIsEmpty(SeqListHead) == 0)
    {
        printf("SeqListIsEmpty!!!");
        return (datatype)-1;
    }

    //2、删除数据
    return SeqListHead->data[SeqListHead->pos--];
}

/*
*功能：按位置插入数据
*参数: 
*  @: SeqListHead: 顺序表的地址
*  @: data : 插入的数据
*  @: pos : 插入的位置
*返回值: 
成功，返回 : 0
失败，返回 : -1
*/
int SeqListInsertByPos(SeqList_t *SeqListHead,datatype data,int pos)
{
    //1、判满
    if(SeqListIsFull(SeqListHead) == 0)
    {
        printf("%s full,insert error!!!\n",__func__);
        //__func__  表示当前函数的函数名
        return -1;
    }

    //2、检测位置参数是否正确
    if(pos < 0  ||  pos > SeqListHead->pos + 1 )
    {
        printf("位置参数有问题,插入失败！！！\n");
        return -1;
    }

    //3、插入数据之前(需要将对应的位置后面的数据整体向后移动一个)
    //让表示式成立，执行for循环 
    for(int i = SeqListHead->pos;  i >= pos; i--)
    {
        SeqListHead->data[i+1] = SeqListHead->data[i];
    }

    //4、放入数据
    SeqListHead->data[pos] = data;

    //5、刷新一下
    SeqListHead->pos++;

    return 0;
}


//按位置删除
datatype SeqListdeleteByPos(SeqList_t *SeqListHead,int pos)
{
    if(SeqListIsEmpty(SeqListHead) == 0)
    {
        printf("SeqListIsEmpty!!!");
        return (datatype)-1;
    }
    if(pos < 0  ||  pos > SeqListHead->pos )
    {
        printf("位置参数有问题,删除失败！！！\n");
        return (datatype)-1;
    }
    for(int i=pos;i<SeqListHead->pos;i++)
    {
         SeqListHead->data[i] = SeqListHead->data[i+1];
    }
      SeqListHead->pos--;
      return (datatype)0;
}
//按位置查询数据

//按数据查询位置

//按位置更新数据
